package com.zzgc.common.utils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Pattern;

/**
 *  基本数据类型的相关操作工具
 * @Author: Liglei
 * @CreateTime: 2023-01-07  15:58
 * @Description:
 * @Version: 1.0
 */
public class LangUtil {

    /**
     *  汉字数字转换数字 ( 只使用于十万以下的数字, 以上的有问题, 不适用小数)
     * @Author
     * @Description
     * @Date  2023/1/7 15:39
     * @Param str 要转换的字符数字
     * @return int 返回数字
     */
    public static Integer hanZiToNum(String str){
        // 数字
        HashMap<String, Integer> hashMap = new HashMap<>();
        // 单位
        HashMap<String, Integer> map = new HashMap<>();
        hashMap.put("零", 0);
        hashMap.put("一", 1);
        hashMap.put("二", 2);
        hashMap.put("三", 3);
        hashMap.put("四", 4);
        hashMap.put("五", 5);
        hashMap.put("六", 6);
        hashMap.put("七", 7);
        hashMap.put("八", 8);
        hashMap.put("九", 9);
        map.put("十", 10);
        map.put("百", 100);
        map.put("千", 1000);
        map.put("万", 10000);

        List<Integer> arrayList = new ArrayList<>();
        int number = 1;
        for (int i = 0; i < str.length(); i++) {
            String of = String.valueOf(str.charAt(i));
            if (map.get(of) == null){ // 不是单位字符
                number = hashMap.get(of);
                if (str.length() == 1){ // 如果只有一个字符且不是单位, 那肯定是个位数
                    arrayList.add(number);
                }else if (str.length() -1 == i && number < 10){ // 如果是最后一位且小于10, 那肯定也是个位数
                    arrayList.add(number);
                }
            }else {  // 是单位字符
                arrayList.add(number * map.get(of));
                number = 1;
            }
        }
        number = 0;
        // 把每个单位的数字相加
        for (Integer integer : arrayList) {
            number += integer;
        }
        return number;
    }

    public static void main(String[] args) {
        String s = "一年级";
        s = s.replaceAll("年级", "");
        System.out.println("s = " + s);
        System.out.println(isNumeric(s));
    }

    /**
     *  判断字符串是否为数字
     * @Author
     * @Description
     * @Date  2023/1/7 16:09
     * @Param str 需要判断的字符串
     * @return boolean true 是数字, false 不是数字
     */
    public static boolean isNumeric(String str){
        Pattern pattern = Pattern.compile("[0-9]*");
        return pattern.matcher(str).matches();
    }

}
